﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Texfina.Core.Common;
using Texfina.BOQry.Co;
using Texfina.Core.Web;
using Texfina.Entity.Co;
using System.Text;
using System.Collections;
using System.Web.UI.HtmlControls;
using System.Data;

namespace wfCompras
{
    public partial class WebForm1 : BasePage
    {

        public const int _GRDLIST_STCONTRATO = 14;
        Decimal mtIgv;
        string codCondPago;
        public string _STRSTCONTRATO
        {
            get { return (string)this.ViewState["_STRSTCONTRATO"]; }
            set { this.ViewState["_STRSTCONTRATO"] = value; }
        }

        protected void Page_Load(object sender, EventArgs e)
        {

            Constants c = new Constants();
            btnBuscarProv.ImageUrl = Constants.ConstMenuControlValue.BUTTON_FIND;
            btnBuscarPedido.ImageUrl = Constants.ConstMenuControlValue.BUTTON_FIND;
            btnBuscarCondPago.ImageUrl = Constants.ConstMenuControlValue.BUTTON_FIND;
            btnBuscarImport.ImageUrl = Constants.ConstMenuControlValue.BUTTON_FIND;
           
        
            if (IsCallback) return;
                if (!Page.IsPostBack)
                {
                    LoadCombos();
                }
     
          }

        private void LoadCombos()
        {
            EEmpEstable est = new EEmpEstable();
            est.IdEmpresa = "001";
            est.IdEstable = "   ";
            ETablaGeneral tablaGeneral = new ETablaGeneral();
            tablaGeneral.Id_tabla = "";

            WebHelper.LoadListControl(dpEntregaPor, BEmpEstable.EmpEstableFill(est), "dsEstable", "idEstable");
            WebHelper.LoadListControl(dpUsadoEn, BEmpEstable.EmpEstableFill(est), "dsEstable", "idEstable");
            WebHelper.LoadListControl(dpTipo, BTablaGeneral.TablaGeneralFill("123"), "ds_item", "id_item");
            WebHelper.LoadListControl(dpModalidad, BTablaGeneral.TablaGeneralFill("127"), "ds_item", "id_item");
            WebHelper.LoadListControl(dpNoneda, BTablaGeneral.TablaGeneralFill("016"), "ds_item", "id_item");
            WebHelper.LoadListControl(dpPrioridad, BTablaGeneral.TablaGeneralFill("027"), "ds_item", "id_item");
            WebHelper.LoadListControl(dpProv, BProveedor.Proveedor_qry02(), "ds_raznombre", "id_clipro");
            String strTextoSeleccione = "Seleccione";

            dpEntregaPor.Items.Insert(0, new ListItem(strTextoSeleccione, "0"));
            dpUsadoEn.Items.Insert(0, new ListItem(strTextoSeleccione, "0"));
            dpTipo.Items.Insert(0, new ListItem(strTextoSeleccione, "0"));
            dpModalidad.Items.Insert(0, new ListItem(strTextoSeleccione, "0"));
            dpNoneda.Items.Insert(0, new ListItem(strTextoSeleccione, "0"));
            dpPrioridad.Items.Insert(0, new ListItem(strTextoSeleccione, "0"));
            dpProv.Items.Insert(0, new ListItem(strTextoSeleccione, "0"));

            mCalculaTotal();
        }

        public void RefreshLoadNumbers()
        {
            LoadCombos();
            AddCallbackControl(dpEntregaPor);//posicion 0
            AddCallbackControl(dpUsadoEn);//posicion 0
            AddCallbackControl(dpTipo);//posicion 0
            AddCallbackControl(dpModalidad);//posicion 0
            AddCallbackControl(dpPrioridad);//posicion 0
            AddCallbackControl(dpNoneda);//posicion 0
            AddCallbackControl(dpProv);//posicion 0
        }

        protected void btnBuscarProv_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                Session[Constants.ConstSessionVar.SESION_PROV] = "_SESION_PROV";
                ScriptManager.RegisterStartupScript(this, typeof(string), "OPEN_WINDOW", "var Mleft = (screen.width/2)-(760/2);var Mtop = (screen.height/2)-(700/2);window.open('wfProvFind.aspx', null, 'height=400,width=750,status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,top=\'+Mtop+\', left=\'+Mleft+\'' );", true);
           }
            catch (Exception ex)
            {
                ex.ToString();
            }
        }

       protected void btnBuscarPedido_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                //PERSONA SOLICITANTE
                Session[Constants.ConstSessionVar.SESION_PEDIDOPOR] = "_SESION_PEDIDOPOR";

                ScriptManager.RegisterStartupScript(this, typeof(string), "OPEN_WINDOW", "var Mleft = (screen.width/2)-(760/2);var Mtop = (screen.height/2)-(700/2);window.open( 'WfPersonalBnd.aspx', null, 'height=400,width=700,status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,top=\'+Mtop+\', left=\'+Mleft+\'' );", true);
            }
            catch (Exception ex)
            {
                ex.ToString();
            }
        }

        protected void btnBuscarCondPago_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                Session[Constants.ConstSessionVar.SESION_FORMPAGO] = "_SESION_FORMPAGO"; 
                ScriptManager.RegisterStartupScript(this, typeof(string), "OPEN_WINDOW", "var Mleft = (screen.width/2)-(760/2);var Mtop = (screen.height/2)-(700/2);window.open( 'WfCondicionPago.aspx', null, 'height=400,width=700,status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,top=\'+Mtop+\', left=\'+Mleft+\'' );", true);

            }
            catch (Exception ex)
            {
                ex.ToString();
            }
        }


        private void mSalvarDatosGrilla()
        {
            try
            {
                //recorre la cantidad de items, por cada item la entidad oAsigHorario va almacenando , 
                //esto para que data que se va ingresando en la grilla no se pierda

                List<EDetProducto> lstSalvarDatos = new List<EDetProducto>();

                for (int i = 0; GVDetalleProducto.Rows.Count > i; i++)
                {
                    // la entidad almacena los items de la grilla 

                    EDetProducto oDetProducto = new EDetProducto();

                    // verificar si los valores ingresados en la grilla estan en label o texbox como tambien en un dropdowlinst

                    oDetProducto._Codigo = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIdproducto")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIdproducto")).Text);

                    oDetProducto._Pres = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIdPres")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIdPres")).Text);

                    oDetProducto._Producto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDsProducto")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDsProducto")).Text);
                    oDetProducto._Presenta = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPresentacion")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPresentacion")).Text);
                    oDetProducto._UM = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtUM")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtUM")).Text);
                    oDetProducto._Peso_Bruto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPesoBruto")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPesoBruto")).Text);

                    oDetProducto._Lote = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtLote")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtLote")).Text);

                    oDetProducto._fe_venc =((TextBox)GVDetalleProducto.Rows[i].FindControl("txtFecVencimiento")).Text;
                    oDetProducto._fe_Entrega = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtFecEngrega")).Text;

                    oDetProducto._OP = string.IsNullOrEmpty(((DropDownList)GVDetalleProducto.Rows[i].FindControl("dpdOP")).SelectedValue) ? string.Empty : Convert.ToString(((DropDownList)GVDetalleProducto.Rows[i].FindControl("dpdOP")).Text);
                    oDetProducto._igvActivo = ((CheckBox)GVDetalleProducto.Rows[i].FindControl("chkBxIGV")).Checked;
                    
                    oDetProducto._Cant = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtCantidad")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtCantidad")).Text);
                    oDetProducto._PreNeto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPneto")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPneto")).Text);
                    oDetProducto._PreUnit = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPU")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPU")).Text);

                    oDetProducto._C_Gasto = string.IsNullOrEmpty(((DropDownList)GVDetalleProducto.Rows[i].FindControl("dpdUN")).SelectedValue) ? string.Empty : Convert.ToString(((DropDownList)GVDetalleProducto.Rows[i].FindControl("dpdUN")).Text);

                    oDetProducto._idCosto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIdccostos")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIdccostos")).Text);
                    oDetProducto._C_Costos = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtdsCosto")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtdsCosto")).Text);

                    oDetProducto._Tipgasto = string.IsNullOrEmpty(((DropDownList)GVDetalleProducto.Rows[i].FindControl("dpTG")).SelectedValue) ? string.Empty : Convert.ToString(((DropDownList)GVDetalleProducto.Rows[i].FindControl("dpTG")).Text); 

                    oDetProducto._Dscto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDscto")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDscto")).Text);
                    oDetProducto._Igv = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIGV")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIGV")).Text);
                    oDetProducto._subTotal = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtSubTotal")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtSubTotal")).Text);
                    //añade los valores de la entidad a la lista de la entidad

                    lstSalvarDatos.Add(oDetProducto);

                }
                // se crea una sesion para almacenar la lista que contiene los  datos.

                Session["SeslstSalvaDatos"] = lstSalvarDatos;
            }

            catch (Exception ex)
            {

                ex.ToString();
            }
        }
   
        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            //try
            //{
                // crea la entidad tipo lista 
                //List<AsignacionHorarioEnt> lstAsigHorario = new List<AsignacionHorarioEnt>();
                // crea la entidad para obtener los campos que deseamos esten en blanco

                //AsignacionHorarioEnt asigHorario = new AsignacionHorarioEnt();

                List<EDetProducto> lstProd = new List<EDetProducto>();

                EDetProducto prod = new EDetProducto();

                // llega a ingresar siempre en cuando ya se tenga un registro en la grilla

                if (GVDetalleProducto.Rows.Count > 0)
                {
                    //almacena en la entidad la informacion ingresada en la grilla
                    //salva los datos, hace que cuando se de agregar no se pierda la informacion ya ingresada

                    mSalvarDatosGrilla();
                    lstProd = (List<EDetProducto>)(Session["SeslstSalvaDatos"]);

                    //lstAsigHorario = (List<AsignacionHorarioEnt>)(Session["SeslstSalvaDatos"]);
                    //añade un registro mas en blaco

                    prod._Codigo = "";
                    prod._Pres = "";
                    prod._Producto = "";
                    prod._Presenta = "";

                    prod._UM = "";
                    prod._Peso_Bruto = Convert.ToDecimal("0.000");
                    prod._Lote = "";
                    DateTime fecha_venc = DateTime.Today;
                    DateTime fecha_Entrega = DateTime.Today;
                    prod._fe_venc = fecha_venc.ToString();
                    prod._fe_Entrega = fecha_Entrega.ToString();
                    prod._OP = "";
                    prod._Cant = Convert.ToDecimal("0.000");
                    prod._PreNeto = Convert.ToDecimal("0.000");
                    prod._PreUnit = Convert.ToDecimal("0.000");
                    prod._C_Gasto = "";
                    prod._idCosto = "";
                    prod._C_Costos = "";
                    prod._Tipgasto = "";
                    prod._Dscto = Convert.ToDecimal("0.000");
                    prod._Igv = Convert.ToDecimal("0.000");
                    prod._subTotal = Convert.ToDecimal("0.000");

                    // muestra el item en blanco

                    lstProd.Add(prod);
                    GVDetalleProducto.DataSource = lstProd;
                    GVDetalleProducto.DataBind();
                    Session["lstListadoGrilla"] = lstProd;


                }
                else
                {
                    // Añande el primer item en blando de la grilla

                    prod._Codigo = "";
                    prod._Pres = "";
                    prod._Producto = "";
                    prod._Presenta = "";

                    prod._UM = "";
                    prod._Peso_Bruto = Convert.ToDecimal("0.000");


                    prod._Lote = "";

                    DateTime fecha_venc = DateTime.Today;
                    DateTime fecha_Entrega = DateTime.Today;

                    prod._fe_venc = fecha_venc.ToString();
                    prod._fe_Entrega = fecha_Entrega.ToString();
                    prod._OP = "";
                    prod._Cant = Convert.ToDecimal("0.000");
                    prod._PreNeto = Convert.ToDecimal("0.000");
                    prod._PreUnit = Convert.ToDecimal("0.000");

                    prod._C_Gasto = "";
                    prod._idCosto = "";
                    prod._C_Costos = "";
                    prod._Tipgasto = "";

                    prod._Dscto = Convert.ToDecimal("0.000");
                    prod._Igv = Convert.ToDecimal("0.000");
                    prod._subTotal = Convert.ToDecimal("0.000");


                    lstProd.Add(prod);

                    //Muestra la grilla con un fila en blanco 

                    GVDetalleProducto.DataSource = lstProd;

                    GVDetalleProducto.DataBind();

                    Session["lstListadoGrilla"] = lstProd;
                //}
            }
            //catch (Exception ex)
            //{
            //    Response.Write(ex.ToString());
            //}
        }

        protected void btnBuscarImport_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                Session[Constants.ConstSessionVar.SESION_IMPORTACION] = "_SESION_IMPORTACION";
                ScriptManager.RegisterStartupScript(this, typeof(string), "OPEN_WINDOW", "var Mleft = (screen.width/2)-(760/2);var Mtop = (screen.height/2)-(700/2);window.open( 'wfImportacionesBnd.aspx', null, 'height=400,width=700,status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,top=\'+Mtop+\', left=\'+Mleft+\'' );", true);

            }
            catch (Exception ex)
            {
                ex.ToString();
            }
        }

    
        protected void GVDetalleProducto_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            PageBase ri = new PageBase();
            ri.EditRowIndex = Convert.ToInt32(e.CommandArgument);
          

            switch (e.CommandName)
            {

                 case Constants.ConstGridRowCommand.GRIDEDIT:

                    Session[Constants.ConstSessionVar.SESION_PRODUCTO_] = "SESION_PRODUCTO_";

                 ScriptManager.RegisterStartupScript(this, typeof(string), "OPEN_WINDOW", "var Mleft = (screen.width/2)-(760/2);var Mtop = (screen.height/2)-(700/2);window.open( 'wfProductoBnd.aspx', null, 'height=400,width=700,status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,top=\'+Mtop+\', left=\'+Mleft+\'' );", true);
                    
                  
            //        this.lblTitlePopup.Text = "Contrato (Editar)";
            //        this.GridEditAction = GridEditAction.Edit;
            //        _STRSTCONTRATO = Constants.ConstFlagEstado.DESACTIVADO;
            //        this.mdlPopup.Show();    
            //    //this.mpeThePopup.Show();
            //        this.LoadDataEditPopup(gvListar, this.EditRowIndex);
            //        //this.RegisterEditPopupScripts();
            //        //this.SpliterTiempo();
                   break;
                   case Constants.ConstGridRowCommand.GRIDMST:


                       for (int i = 0; GVDetalleProducto.Rows.Count > i; i++)
                       {
                           var chk = ((CheckBox)GVDetalleProducto.Rows[i].FindControl("chkBxSelect")) as CheckBox;
                        if (chk.Checked)
                        { 
                            // almacena en variables los items que va recorriendo

                            ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIdproducto")).Text = hddCodigo.Value;
                            ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIdPres")).Text = hddPres.Value;
                            ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDsProducto")).Text = hddProducto.Value;
                            ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPresentacion")).Text = hddPresenta.Value;
                            ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtUM")).Text = hddUm.Value;
                            ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPesoBruto")).Text = hddPesoBruto.Value;
                            //lblIdProducto = hddCodigo.Value;
                        }
                       }
                   
                   break;
                case Constants.ConstGridRowCommand.GRIDCALC:
                   mCalculaTotal();
                   GetIgv();

                 break;

                case Constants.ConstGridRowCommand.GRIDDELETE:
                    GVDetalleProducto.DeleteRow(Convert.ToInt32(e.CommandArgument));
                    GVDetalleProducto.DataBind();
                 break;

           }

        }


        protected void mCalculaTotal()
        {
            decimal deSuma = 0;
            decimal deTot;
            //decimal deIgvtot = 0;

            deTot = 0;

            for (int x = 0; GVDetalleProducto.Rows.Count > x; x++)
            {
                var stIgv = ((CheckBox)GVDetalleProducto.Rows[x].FindControl("chkBxIGV")) as CheckBox;

                //TextBox deIgv = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtIGV");
                TextBox txtCant = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtCantidad");
                TextBox txtPU = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtPU");
                deSuma = Convert.ToDecimal(txtCant.Text) * Convert.ToDecimal(txtPU.Text);
               
                 deTot = deTot + deSuma;
                 //((TextBox)GVDetalleProducto.Rows[x].FindControl("txttotal")).Text = deTot.ToString();
                 txtTotal.Text = deTot.ToString();
               
            }
            //decimal devalor = (deTot + deIgvtot);
            //txtTotal.Text = string.Format("{0:0.000}", devalor);
        }

        protected void GVDetalleProducto_RowDataBound(object sender, GridViewRowEventArgs e)
        {


            //decimal cant = 0;
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    //llena la columna de la grila tipo dropdownlist con los tipos de horario.

                    DropDownList cbGrillaOP = (DropDownList)e.Row.FindControl("dpdOP");
                    DropDownList cbGrillaUN = (DropDownList)e.Row.FindControl("dpdUN");
                    DropDownList cbGrillaTG = (DropDownList)e.Row.FindControl("dpTG");

                  

                    CheckBox chkIgv = (CheckBox)e.Row.FindControl("chkBxIGV");
                    EUnidadNegocio eu = new EUnidadNegocio();
              

                    eu.IdEmpresa = "001";
                    eu.IdUNegocio = "";

                    WebHelper.LoadListControl(cbGrillaUN, BUndNegocio.MG_UNegocio_qry04(eu), "dsUNegocio", "idUNegocio");
                    WebHelper.LoadListControl(cbGrillaTG, BTablaGeneral.MG_TablaGenDet_qry04("048", ""), "dsDescrip", "idCodigo");

                    AddCallbackControl(cbGrillaUN);

                    cbGrillaUN.Items.Insert(0, new ListItem("Seleccione", "0"));
                    cbGrillaTG.Items.Insert(0, new ListItem("Seleccione", "0"));
                    cbGrillaOP.Items.Insert(0, new ListItem("Seleccione", "0"));

                    cbGrillaUN.SelectedValue = (String)DataBinder.Eval(e.Row.DataItem, "_C_Gasto").ToString();
      
                    cbGrillaOP.SelectedValue = (String)DataBinder.Eval(e.Row.DataItem, "_OP").ToString();
                    cbGrillaTG.SelectedValue = (String)DataBinder.Eval(e.Row.DataItem, "_Tipgasto").ToString();
                    chkIgv.Checked = (Boolean)DataBinder.Eval(e.Row.DataItem, "_igvActivo");

           }
                mCalculaTotal();
        }

        protected void dpdUN_SelectedIndexChanged(object sender, EventArgs e)  
        {
            DropDownList ddl = (DropDownList)sender;
            GridViewRow row = (GridViewRow)ddl.Parent.Parent;
            int idx = row.RowIndex;

            DropDownList ddl2 = (DropDownList)row.Cells[1].FindControl("dpdUN");
            DropDownList ddl3 = (DropDownList)row.Cells[1].FindControl("dpdCC");

            EUnidadNegocio eun = new EUnidadNegocio();
            eun.IdEmpresa = "001";// llenar con sesion
            eun.IdUNegocio = ddl2.SelectedValue;

            ddl3.Items.Insert(0, new ListItem("Seleccione", "0"));
            WebHelper.LoadListControl(ddl3, BUndNegocio.MG_UNegocio_qry(eun), "dsCCosto", "idCCosto");

            AddCallbackControl(ddl3);
            //ddl3.SelectedValue = (String)DataBinder.Eval(row.DataItem, "_C_Costos").ToString();
        }

        private void GetIgv()
        {
            EDTipImpuesto dti = new EDTipImpuesto();
            DropDownList igv = new DropDownList();
            dti.IdPeriodo = "2013"; // LLENAR CON SESION
            WebHelper.LoadListControl(igv, BDeTipImpuesto.GetListFill_Qry01(dti), "mtIgv", "mtIgv");
            for(int x = 0; GVDetalleProducto.Rows.Count > x; x++)
            {
                var chk = ((CheckBox)GVDetalleProducto.Rows[x].FindControl("chkBxSelect")) as CheckBox;
                var chkIgv = ((CheckBox)GVDetalleProducto.Rows[x].FindControl("chkBxIGV")) as CheckBox;
                TextBox _SubTotal = (TextBox)GVDetalleProducto.Rows[x].FindControl("txtSubTotal");

                if(chk.Checked)
                {
                    if (chkIgv.Checked)
                    {
                        mtIgv = Convert.ToDecimal(igv.SelectedItem.Text) * Convert.ToDecimal(_SubTotal.Text);
                        ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtIGV")).Text = mtIgv.ToString();
                    }
                    else
                    {
                        ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtIGV")).Text = "0.0000";
                    }
                }
            }
        }

        protected void dpdCC_SelectedIndexChanged(object sender, EventArgs e)
        {
            decimal deTot;

            for (int i = 0; GVDetalleProducto.Rows.Count > i; i++)
            {
                var chk = ((CheckBox)GVDetalleProducto.Rows[i].FindControl("chkBxSelect")) as CheckBox;

                TextBox cant = (TextBox)GVDetalleProducto.Rows[i].FindControl("txtCantidad");

                TextBox pu = (TextBox)GVDetalleProducto.Rows[i].FindControl("txtPU");

                //TextBox SubTotal = (TextBox)GVDetalleProducto.Rows[i].FindControl("txtSubTotal");

                if (chk.Checked)
                {
                    // almacena en variables los items que va recorriendo

                    var idccostos = ((DropDownList)GVDetalleProducto.Rows[i].FindControl("dpdCC")) as DropDownList;

                    ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIdccostos")).Text = idccostos.SelectedValue;
                    ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtdsCosto")).Text = idccostos.SelectedItem.Text;

                    deTot = Convert.ToDecimal(cant.Text) * Convert.ToDecimal(pu.Text);
                    ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtSubTotal")).Text = deTot.ToString();

                }
            }
            mCalculaTotal();
            GetIgv();
        }

     

     
   } 
}